<?php
require_once "log.php";

class  Database
{
    private $conn;

    public function __construct($servername, $username, $password, $dbname)
    {
        $this->conn = new  mysqli($servername, $username, $password, $dbname);
        if ($this->conn->connect_error) {
            die("连接失败:  " . $this->conn->connect_error);
        }

        $this->conn->query("SET  NAMES  'utf8'");
    }

    public function __destruct()
    {
        $this->conn->close();
    }

    public function insertData($sbid, $connsock)
    {
        try {
            $stmt = $this->conn->prepare("INSERT  INTO  标识  (sbid,  connsock)  VALUES  (?,  ?)");
            $stmt->bind_param("ss", $sbid, $connsock);
            if ($stmt->execute()) {
                $insertedRows = $stmt->affected_rows;
                if ($insertedRows > 0) {
                    echo "新记录插入成功";
                    return true; // 数据添加成功
                } else {
                    return false; // 没有行受到影响，数据添加失败
                }
            } else {
                return false; // 执行插入语句失败，数据添加失败
            }
        } catch (Exception  $e) {
            logError("Error:  " . $e->getMessage());
            return false; // 出现异常，数据添加失败
        }
    }

    public function updateData($sbid, $connsock)
    {
        try {
            $stmt = $this->conn->prepare("UPDATE  标识  SET  connsock=?  WHERE  sbid=?");
            $stmt->bind_param("ss", $connsock, $sbid);
            if ($stmt->execute()) {
                $insertedRows = $stmt->affected_rows;
                if ($insertedRows > 0) {
                    echo "记录更新成功";
                    return true; // 成功
                } else {
                    return false; // 失败
                }
            } else {
                return false; // 失败
            }
        } catch (Exception  $e) {
            logError("Error:  " . $e->getMessage());
            return false;//失败
        }
    }

    public function deleteData($connsock)
    {
        try {
            $stmt = $this->conn->prepare("DELETE  FROM  标识  WHERE  connsock=?");
            $stmt->bind_param("s", $connsock);
            if ($stmt->execute()) {
                $insertedRows = $stmt->affected_rows;
                if ($insertedRows > 0) {
                    echo "记录删除成功";
                    return true; // 成功
                } else {
                    return false; // 失败
                }
            } else {
                return false; // 失败
            }
        } catch (Exception  $e) {
            logError("Error:  " . $e->getMessage());
            return false; // 失败
        }
    }

    public function deleteDataSBID($sbid)
    {
        try {
            $stmt = $this->conn->prepare("DELETE  FROM  标识  WHERE  sbid=?");
            $stmt->bind_param("s", $sbid);
            if ($stmt->execute()) {
                $insertedRows = $stmt->affected_rows;
                if ($insertedRows > 0) {
                    echo "记录删除成功";
                    return true; // 成功
                } else {
                    return false; // 失败
                }
            } else {
                return false; // 失败
            }
        } catch (Exception  $e) {
            logError("Error:  " . $e->getMessage());
            return false; // 失败
        }
    }

    public function selectData($sbid)
    {
        try {
            $stmt = $this->conn->prepare("SELECT  connsock  FROM  标识  WHERE  sbid=?");
            $stmt->bind_param("s", $sbid);
            $stmt->execute();
            $result = $stmt->get_result();

            if ($row = $result->fetch_assoc()) {
                return $row["connsock"];
            } else {
                return null;
            }
        } catch (Exception  $e) {
            logError("Error:  " . $e->getMessage());
            return null;
        }
    }

    public function selectDataCONNSOCK($connsock)
    {
        try {
            $stmt = $this->conn->prepare("SELECT  connsock  FROM  标识  WHERE  connsock=?");
            $stmt->bind_param("s", $connsock);
            $stmt->execute();
            $result = $stmt->get_result();
            if ($row = $result->fetch_assoc()) {
                return $row["connsock"];
            } else {
                return null;
            }
        } catch (Exception  $e) {
            logError("Error:  " . $e->getMessage());
            return null;
        }
    }

    public function selectDataSBID($sbid)
    {
        try {
            $stmt = $this->conn->prepare("SELECT  sbid  FROM  标识  WHERE  sbid=?");
            $stmt->bind_param("s", $sbid);
            $stmt->execute();
            $result = $stmt->get_result();
            if ($row = $result->fetch_assoc()) {
                return $row["sbid"];
            } else {
                return null;
            }
        } catch (Exception  $e) {
            logError("Error:  " . $e->getMessage());
            return null;
        }
    }

// 在日志中记录错误
    private function logError($errorMsg)
    {
        $logger = new Logger("database");
        // 配置日志记录器
        // ...

        // 记录错误消息到日志
        $logger->error($errorMsg);
    }

    public function closeDbConnection()
    {
        if ($this->conn) {
            $this->conn->close();
        }
    }
}


class Logger
{
    // 记录日志的文件名
    private $filename;
    // 日志级别，默认为INFO
    private $level;

    /**
     * Logger类的构造函数，接收一个文件名和一个可选的日志级别
     * @param $filename string 记录日志的文件名
     * @param $level string 可选的日志级别，默认为'INFO'
     */
    public function __construct($filename, $level = 'INFO')
    {
        // 将传入的文件名赋值给成员变量$filename
        $this->filename = $filename;
        // 将传入的日志级别赋值给成员变量$level
        $this->level = $level;
    }

    /**
     * 记录错误日志
     * @param $message string 要记录的错误信息
     */
    public function error($message)
    {
        // 如果传入的日志级别为ERROR，则调用write方法记录错误日志
        if ($this->level === 'ERROR') {
            $this->write($message);
        }
    }

    /**
     * 记录警告日志
     * @param $message string 要记录的警告信息
     */
    public function warning($message)
    {
        // 如果传入的日志级别为WARNING，则调用write方法记录警告日志
        if ($this->level === 'WARNING') {
            $this->write($message);
        }
    }

    /**
     * 记录信息日志
     * @param $message string 要记录的信息内容
     */
    public function info($message)
    {
        // 如果传入的日志级别为INFO，则调用write方法记录信息日志
        if ($this->level === 'INFO') {
            $this->write($message);
        }
    }

    /**
     * 将日志内容写入文件的方法，格式为"[时间] [日志级别] [内容]"，并将内容追加到文件中
     * @param $message string 要记录的日志内容
     */
    private function write($message)
    {
        // 获取当前时间并拼接日志级别前缀，形成格式化的日志内容模板
        $date = date('Y-m-d H:i:s');
        $prefix = "[$date] [$this->level] ";
        // 将日志内容拼接成完整的内容字符串，并使用file_put_contents方法将内容写入文件，同时设置文件追加模式（FILE_APPEND）
        $content = $prefix . $message . "\n";
        file_put_contents($this->filename, $content, FILE_APPEND);
    }
}


// 在日志中记录错误
function logError($errorMsg)
{
    $logger = new Logger("database");
    // 配置日志记录器
    // ...

    // 记录错误消息到日志
    $logger->error($errorMsg);
}

const DB_HOST = '127.0.0.1';
const DB_USER = 'cx';
const DB_PASS = 'cx123100';
const DB_KU = 'wlw';
const DB_CHAR = 'utf8';
$mysqlDB = @mysqli_connect(DB_HOST,DB_USER,DB_PASS,DB_KU);
if (mysqli_connect_errno($mysqlDB))
{
    echo '错误: '.mysqli_connect_error($mysqlDB);
}
mysqli_select_db($mysqlDB,DB_KU);//要操作的数据库
mysqli_set_charset($mysqlDB,DB_CHAR);//设置字符编码